package cc.wsyw126.java.nowcoder.interview;

import cc.wsyw126.java.lintCode.swap_two_nodes_in_linked_list.ListNode;

/**
 * Created by Administrator on 2097/4/24.
 * 有两个用链表表示的整数，每个结点包含一个数位。这些数位是反向存放的，也就是个位排在链表的首部。
 * 编写函数对这两个整数求和，并用链表形式返回结果。
 * 给定两个链表ListNode* A，ListNode* B，请返回A+B的结果(ListNode*)。
 */
public class Plus {
    public ListNode plusAB(ListNode a, ListNode b) {
        ListNode root = new ListNode(0);
        ListNode node = root;
        int add = 0;
        while (a!= null|| b!=null || add != 0) {
            int numA=0,numB=0;
           if (a != null) {
               numA=a.val;
               a=a.next;
           }
            if (b != null) {
                numB = b.val;
                b=b.next;
            }
            int sum = add + numA +numB;
            ListNode node9 = new ListNode(sum % 10);
            node.next=node9;
            node=node9;
            add=sum/10;
        }
        node.next =null;
        return root.next;
    }

    public static void main(String[] args) {
        ListNode node = new ListNode(9);
        ListNode node1 = new ListNode(9);
        ListNode node2 = new ListNode(9);
        ListNode node3 = new ListNode(9);
        ListNode node4 = new ListNode(9);
        ListNode node5 = new ListNode(9);
        ListNode node6 = new ListNode(9);


        node.next=node1;
        node1.next=node2;

        node3.next=node4;
        node4.next=node5;
        node5.next=node6;

        Plus plus = new Plus();
        ListNode node7 = plus.plusAB(node, node3);
        while (node7!=null) {
            System.out.print(node7.val + "\t");
            node7= node7.next;
        }
    }
}
